package it.polimi.TravelDreamEAR.ejb.entities;

import it.polimi.TravelDreamEAR.ejb.sessionBeans.dto.*;

import java.io.Serializable;

import javax.persistence.*;

import org.apache.commons.codec.digest.DigestUtils;

import java.util.List;


/**
 * The persistent class for the cliente database table.
 * 
 */
@Entity
@NamedQuery(name="Cliente.findAll", query="SELECT c FROM Cliente c")
public class Cliente implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	private String username;

	private String citta;

	private String cognome;

	private String email;

	private String nome;

	private String password;

	private String telefono;

	//bi-directional many-to-one association to Amico
	@OneToMany(mappedBy="clienteBean")
	private List<Amico> amicos;

	//bi-directional many-to-one association to IstanzaPacchetto
	@OneToMany(mappedBy="clienteBean")
	private List<IstanzaPacchetto> istanzaPacchettos;
	
	//bi-directional many-to-one association to IstanzaPacchetto
	@OneToMany(mappedBy="acquirente")
	private List<IstanzaPacchetto> istanzeAcquistate;

	//bi-directional many-to-one association to PacchettoCliente
	@OneToMany(mappedBy="clienteBean")
	private List<PacchettoCliente> pacchettoClientes;

	public Cliente() {
	}
	
	public Cliente(ClienteDTO clienteDTO) {
		this.username=clienteDTO.getUsername();
		this.citta=clienteDTO.getCitta();
		this.cognome=clienteDTO.getCognome();
		this.email=clienteDTO.getEmail();
		this.nome=clienteDTO.getNome();
		this.password=DigestUtils.sha256Hex(clienteDTO.getPassword());
		this.telefono=clienteDTO.getTelefono();
	}

	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getCitta() {
		return this.citta;
	}

	public void setCitta(String citta) {
		this.citta = citta;
	}

	public String getCognome() {
		return this.cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getTelefono() {
		return this.telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public List<Amico> getAmicos() {
		return this.amicos;
	}

	public void setAmicos(List<Amico> amicos) {
		this.amicos = amicos;
	}

	public Amico addAmico(Amico amico) {
		getAmicos().add(amico);
		amico.setClienteBean(this);

		return amico;
	}

	public Amico removeAmico(Amico amico) {
		getAmicos().remove(amico);
		amico.setClienteBean(null);

		return amico;
	}

	public List<IstanzaPacchetto> getIstanzaPacchettos() {
		return this.istanzaPacchettos;
	}

	public void setIstanzaPacchettos(List<IstanzaPacchetto> istanzaPacchettos) {
		this.istanzaPacchettos = istanzaPacchettos;
	}

	public List<IstanzaPacchetto> getIstanzeAcquistate() {
		return istanzeAcquistate;
	}

	public void setIstanzeAcquistate(List<IstanzaPacchetto> istanzeAcquistate) {
		this.istanzeAcquistate = istanzeAcquistate;
	}

	public IstanzaPacchetto addIstanzaPacchetto(IstanzaPacchetto istanzaPacchetto) {
		getIstanzaPacchettos().add(istanzaPacchetto);
		istanzaPacchetto.setClienteBean(this);

		return istanzaPacchetto;
	}

	public IstanzaPacchetto removeIstanzaPacchetto(IstanzaPacchetto istanzaPacchetto) {
		getIstanzaPacchettos().remove(istanzaPacchetto);
		istanzaPacchetto.setClienteBean(null);

		return istanzaPacchetto;
	}

	public List<PacchettoCliente> getPacchettoClientes() {
		return this.pacchettoClientes;
	}

	public void setPacchettoClientes(List<PacchettoCliente> pacchettoClientes) {
		this.pacchettoClientes = pacchettoClientes;
	}

	public PacchettoCliente addPacchettoCliente(PacchettoCliente pacchettoCliente) {
		getPacchettoClientes().add(pacchettoCliente);
		pacchettoCliente.setClienteBean(this);

		return pacchettoCliente;
	}

	public PacchettoCliente removePacchettoCliente(PacchettoCliente pacchettoCliente) {
		getPacchettoClientes().remove(pacchettoCliente);
		pacchettoCliente.setClienteBean(null);

		return pacchettoCliente;
	}

}